package controller;

import helper.AbstractAction;
import helper.ParseUtil;

import java.awt.event.ActionEvent;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.swing.JOptionPane;

import view.BankView;
import view.UeberweisungDurchfuehrenDialog;
import bank.Konto;


public class UeberweisungDurchfuehrenDialogController {

    private final BankHandler bankHandler;
    private final BankView bankView;

    private UeberweisungDurchfuehrenDialog dialog;


    public UeberweisungDurchfuehrenDialogController(BankHandler aBankHandler, BankView aBankView) {
        bankHandler = aBankHandler;
        bankView = aBankView;
    }

    public void start() {
        dialog = new UeberweisungDurchfuehrenDialog(bankView, true);
        dialog.getBtDatum().addActionListener(new DatumAuswaehlenAction());
        dialog.getBtUeberweisung().addActionListener(new UeberweisungDurchfuehrenAction());
        dialog.getBtEnde().addActionListener(new BeendenAction());
    }


    // Inner Classes ***********************************************************

    private class UeberweisungDurchfuehrenAction extends AbstractAction {
		@Override
		protected void execute(ActionEvent aEvent) throws Exception {
			int kontoVon = ParseUtil.parseKontonummer(dialog.getTfKontoVon().getText());
			int kontoNach = ParseUtil.parseKontonummer(dialog.getTfKontoNach().getText());
			double betrag = ParseUtil.parseBetrag(dialog.getTfBetrag().getText());

			DateFormat df = DateFormat.getDateInstance();
			Date date = df.parse(dialog.getTfDatum().getText());
			Calendar currentDate = Calendar.getInstance();
			date.compareTo(currentDate.getTime());
			if (date.compareTo(currentDate.getTime()) <= 0) {
			    JOptionPane.showMessageDialog(dialog, "Bitte wählen sie ein Datum das in der Zukunft liegt!");
			    return;
			}

			Konto resultKontoVon = bankHandler.getKontoByKontoNummer(kontoVon);
			Konto resultKontoNach = bankHandler.getKontoByKontoNummer(kontoNach);
			if (resultKontoNach != null && resultKontoVon != null) {
			    resultKontoVon.auszahlen(betrag, date); // auftragsgeber konto
			    resultKontoNach.einzahlen(betrag, date); // empfänger konto
			    JOptionPane.showMessageDialog(dialog, "Die Überweisung wurde erfolgreich ausgeführt");
			}
		}
    }

    private class DatumAuswaehlenAction extends AbstractAction {
		@Override
		protected void execute(ActionEvent aEvent) throws Exception {
		    DatumAuswaehlenDialogController dialogController = new DatumAuswaehlenDialogController(dialog);
		    dialogController.start();
        }
    }

    private class BeendenAction extends AbstractAction {
		@Override
		protected void execute(ActionEvent aEvent) throws Exception {
            dialog.dispose();
        }
    }
}
